package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import model.Quarto;

public class QuartoDao {

        GenericDao gDao = new GenericDao();
        Connection con = new GenericDao().getConnection();

        public boolean insereQuarto(Quarto quarto){
            boolean inserido = false;
            try{
                PreparedStatement ps = con.prepareStatement("insert into t_quarto (nr_quarto,nr_capacidade" +
                		",nr_camas_casal,nr_camas_solteiro,nr_andar,nm_categoria,bl_livre) values (?,?,?,?,?,?,'true')");
                ps.setInt(1, quarto.getNumeroQuarto());
                ps.setInt(2, quarto.getCapacidade());
                ps.setInt(3, quarto.getCamasCasal());
                ps.setInt(4, quarto.getCamasSolteiro());
                ps.setInt(5, quarto.getAndar());
                ps.setString(6, quarto.getCategoria());

                ps.execute();
                ps.close();
                inserido = true;
            }catch(Exception e){
                e.printStackTrace();
            }
            return inserido;
        }

        public Quarto consultaQuarto(int numQuarto){
            Quarto quarto = new Quarto();
            ResultSet rs = null;
            ResultSet rs1 = null;
            try{
                PreparedStatement ps = con.prepareStatement("select * from t_quarto where pk_cd_quarto = ?");
                ps.setInt(1, numQuarto);
                
                ps.execute();
                //ps.close();
                rs = ps.getResultSet();
                if (rs.next()){
                    quarto.setNumeroQuarto(rs.getInt(2));
                    quarto.setCapacidade(Integer.parseInt(rs.getString(3)));
                    quarto.setCamasCasal(Integer.parseInt(rs.getString(4)));
                    quarto.setCamasSolteiro(Integer.parseInt(rs.getString(5)));
                    quarto.setAndar(Integer.parseInt(rs.getString(6)));
                    quarto.setStatus(rs.getBoolean(7));
                }
            } catch (Exception e){
                e.printStackTrace();
            }
            return quarto;
        }
        
        public Quarto consultaQuartoAndar(int numQuarto, int numAndar){
            Quarto quarto = new Quarto();
            ResultSet rs = null;
            ResultSet rs1 = null;
            try{
                PreparedStatement ps = con.prepareStatement("select * from t_quarto where nr_quarto = ? and nr_andar = ?");
                ps.setInt(1, numQuarto);
                ps.setInt(2, numAndar);
                ps.execute();
                //ps.close();
                rs = ps.getResultSet();
                if (rs.next()){
                    quarto.setNumeroQuarto(rs.getInt(2));
                    quarto.setCapacidade(Integer.parseInt(rs.getString(3)));
                    quarto.setCamasCasal(Integer.parseInt(rs.getString(4)));
                    quarto.setCamasSolteiro(Integer.parseInt(rs.getString(5)));
                    quarto.setAndar(Integer.parseInt(rs.getString(6)));
                    quarto.setCategoria(rs.getString(7));
                    quarto.setStatus(rs.getBoolean(8));
                }
            } catch (Exception e){
                e.printStackTrace();
            }
            return quarto;
        }
        


        public boolean atualizaQuarto(Quarto quarto){
            boolean editado = false;
            try{
                PreparedStatement ps = con.prepareStatement(
                		"update t_quarto " +
                		"set nr_quarto = ?, nr_capacidade = ?, nr_camas_casal = ?," +
                		"nr_camas_solteiro = ?, nr_andar = ?, nm_categoria = ? " +
                		"where nr_quarto = ? and nr_andar = ?");

                ps.setInt(1, quarto.getNumeroQuarto());
                ps.setInt(7, quarto.getNumeroQuarto());
                ps.setInt(2, quarto.getCapacidade());
                ps.setInt(3, quarto.getCamasCasal());
                ps.setInt(4, quarto.getCamasSolteiro());
                ps.setInt(5, quarto.getAndar());
                ps.setInt(8, quarto.getAndar());
                ps.setString(6, quarto.getCategoria());
                
                ps.execute();
                ps.close();
                editado = true;
            } catch(Exception e){
                e.printStackTrace();
            }
            return editado;
        }

        public boolean deletaQuarto(int numQuarto, int numAndar){
            boolean deletado = false;
            try{
                PreparedStatement ps = con.prepareStatement("delete t_quarto where nr_quarto = ? and nr_andar = ?");
                ps.setInt(1, numQuarto);
                ps.setInt(2, numAndar);
                
                ps.execute();
                ps.close();
                deletado = true;
            } catch(Exception e){
                    e.printStackTrace();
            }
            return deletado;
        }
    
        public List<Quarto> listaCompleta(){
        	List<Quarto> retorno = new ArrayList<>();
        	ResultSet rs = null;
        	try{
        		PreparedStatement ps = con.prepareStatement("select * from t_quarto order by nr_andar, nr_quarto");
        		ps.execute();
        		rs = ps.getResultSet();
        		while(rs.next()){
        			Quarto quarto = new Quarto();
        			quarto.setId(rs.getInt("pk_cd_quarto"));
        			quarto.setNumeroQuarto(rs.getInt("nr_quarto"));
        			quarto.setCapacidade(Integer.parseInt(rs.getString("nr_capacidade")));
        			quarto.setCamasCasal(Integer.parseInt(rs.getString("nr_camas_casal")));
        			quarto.setCamasSolteiro(Integer.parseInt(rs.getString("nr_camas_solteiro")));
        			quarto.setAndar(Integer.parseInt(rs.getString("nr_andar")));
        			quarto.setCategoria(rs.getString("nm_categoria"));
        			quarto.setStatus(rs.getBoolean("bl_livre"));
        			retorno.add(quarto);
        		}
        	}catch(Exception e){
        		e.printStackTrace();
        	}
			return retorno;        	
        }
}
